
/* eslint-disable no-undef */
import axios from 'axios'
import { ElMessage } from 'element-plus'
import router from '../router/index'
/**
 * http请求工具类
 *
 * 请求拦截器 负责将客户端标识token值存储并放置在头部提交给服务端
 *
 * 响应拦截器 负责全局处理业务请求的网络或者业务错误
 */
// 创建axios的实例
// 环境的切换
import util from '../util/util'
if (import.meta.env.MODE === 'development') {
    axios.defaults.baseURL = '/api' // 开发环境
} else if (import.meta.env.MODE === 'debug') {
    axios.defaults.baseURL = '/api' // 调试环境
} else if (import.meta.env.MODE === 'production') {
    axios.defaults.baseURL = '/api' // 生产环境
}
// axios.defaults.timeout = 100000
axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded'
// 请求拦截
axios.interceptors.request.use((config: any) => {
    config.headers = util.getHeaders(config.url, util.sortObjectByKeys(config.data))
    return config;
}, (err: any) => {
    Promise.reject(err)
})
// 响应拦截
axios.interceptors.response.use((config: any) => {
    return config
}, (error: any) => {
    ElMessage.error(error.response.data.msg)
    if (error.response) {
        switch (error.response.status) {
            case 401:
                // 返回 401 清除token信息并跳转到登录页面
                setTimeout(() => {
                    router.push({ path: '/login' })
                    window.sessionStorage.clear()
                }, 1000)
        }
    }
    return Promise.reject(error.response.data.msg)   // 返回接口返回的错误信息
})
// export default Server;

/**
 * get方法，对应get请求
 * @param {String} url [请求的url地址]
 * @param {Object} params [请求时携带的参数]
 */
export function get(url: string, params?: object | string) {
    return new Promise((resolve, reject) => {
        axios.get(url, {
            params: params
        }).then(res => {
            resolve(res.data)
        }).catch(err => {
            reject(err.data)
        })
    })
}
/**
 * post方法，对应post请求
 * @param {String} url [请求的url地址]
 * @param {Object} params [请求时携带的参数]
 */
export function post(url: string, params?: object | string, config?: any) {
    return new Promise((resolve, reject) => {
        axios.post(url, params, config)
            .then(res => {
                if (config) {
                    resolve(res)
                } else {
                    resolve(res.data)
                }
            })
            .catch(err => {
                reject(err.data)
            })
    })
}
/**
 * put方法，对应put请求
 * @param {String} url [请求的url地址]
 * @param {Object} params [请求时携带的参数]
 */
export function put(url: string, params?: object | string) {
    return new Promise((resolve, reject) => {
        axios.put(url, params)
            .then(res => {
                resolve(res.data)
            })
            .catch(err => {
                reject(err.data)
            })
    })
}
/**
 * delete方法，对应delete请求
 * @param {String} url [请求的url地址]
 * @param {Object} params [请求时携带的参数]
 */
export function delete2(url: string, params?: object | string) {
    return new Promise((resolve, reject) => {
        axios.delete(url, {
            params: params
        }).then(res => {
            resolve(res.data)
        }).catch(err => {
            reject(err.data)
        })
    })
}
